/*
  三元组
  题目描述
    已知有 a，b，c 三个数组，每一个数组的长度都为 N：
      a = {a1, a2, a3, a4 …… an};
      b = {b1, b2, b3, b4 …… bn};
      c = {c1, c2, c3, c4 …… cn};
    现在我们需要从三个数组中分别拿出一个数，使这三个数满足：
      ai < bj < ck
      1 ≤ i, j, k ≤ N
    以上两个条件；请你算出满足题目要求的方案数。
  输入
    第一行一个整数 n ，代表每个数组的长度
    接下来三行，每一行 n 个整数，分别代表 a，b，c 数组 n 个元素的大小
  输出
    输出一行一个整数，表示满足条件的方案数。
  样例输入
    3
    1 1 1
    2 2 2
    3 3 3
  样例输出
    27
  提示
    数据范围：
      1 ≤ N ≤ 1e5
      1 ≤ ai, bi, ci ≤ 1e9
*/

#include <bits/stdc++.h>

using namespace std;

int a[100001] = {};
int b[100001] = {};
int c[100001] = {};

int main() {
    int n;

    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    for (int i = 1; i <= n; i++) {
        cin >> b[i];
    }
    for (int i = 1; i <= n; i++) {
        cin >> c[i];
    }

    // 分别对数组 a、b、c 按从小到大的顺序进行排序
    sort(a + 1, a + n + 1);
    sort(b + 1, b + n + 1);
    sort(c + 1, c + n + 1);

    long long num = 0;
    long long ti = 1;
    long long t;

    /*
      思路:
        遍历数组 b, 针对 b 中的每个元素 b[j], 求出所有满足"ai < bj < ck"条件的可能情况；
        最后对这些所有可能的情况进行累加即可!
        注意: 如果这一题使用遍历数组 a 或 c，则不得不使用 2 层循环, 这将导致程序运行超时!
    */
    for (int j = 1; j <= n; j++) {
        t = lower_bound(a + 1, a + n + 1, b[j]) - a;
        ti = upper_bound(c + 1, c + n + 1, b[j]) - c;
        long long x = t - 1;         // x  表示数组 a 中比 b[j] 小的数的个数
        long long xi = n + 1 - ti;   // xi 表示数组 c 中比 b[j] 大的数的个数
        num = num + x * xi;  // x * xi : 针对 b[j]，所有满足"ai < bj < ck"条件的情况(组合)个数
    }
    cout << num;

    return 0;
}